package util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DatabaseUtil {
    // 数据库配置 - 请根据实际情况修改
    private static final String URL = "jdbc:mysql://localhost:3306/secondhand_market?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8&allowPublicKeyRetrieval=true";    private static final String USERNAME = "root";  // 推荐使用专用用户
    private static final String PASSWORD = "88989454";   // 修改为你的密码


    // 连接池配置（可选）
    private static final int MAX_POOL_SIZE = 10;
    private static final int INITIAL_POOL_SIZE = 5;
    private static final int MAX_TIMEOUT = 5000; // 5秒

    static {
        try {
            // 加载MySQL驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            System.out.println("MySQL JDBC驱动加载成功");
        } catch (ClassNotFoundException e) {
            System.err.println("MySQL JDBC驱动加载失败: " + e.getMessage());
            throw new RuntimeException("数据库驱动加载失败", e);
        }
    }

    /**
     * 获取数据库连接
     */
    public static Connection getConnection() throws SQLException {
        try {
            Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
            System.out.println("数据库连接成功");
            return connection;
        } catch (SQLException e) {
            System.err.println("数据库连接失败: " + e.getMessage());
            throw e;
        }
    }

    /**
     * 获取数据库连接（带参数）
     */
    public static Connection getConnection(String url, String username, String password) throws SQLException {
        try {
            return DriverManager.getConnection(url, username, password);
        } catch (SQLException e) {
            System.err.println("数据库连接失败: " + e.getMessage());
            throw e;
        }
    }

    /**
     * 关闭数据库连接
     */
    public static void closeConnection(Connection conn) {
        if (conn != null) {
            try {
                if (!conn.isClosed()) {
                    conn.close();
                    System.out.println("数据库连接已关闭");
                }
            } catch (SQLException e) {
                System.err.println("关闭数据库连接时出错: " + e.getMessage());
            }
        }
    }

    /**
     * 测试数据库连接
     */
    public static boolean testConnection() {
        try (Connection conn = getConnection()) {
            return conn != null && !conn.isClosed();
        } catch (SQLException e) {
            System.err.println("数据库连接测试失败: " + e.getMessage());
            return false;
        }
    }

    /**
     * 获取数据库信息
     */
    public static void printDatabaseInfo() {
        try (Connection conn = getConnection()) {
            if (conn != null) {
                System.out.println("=== 数据库信息 ===");
                System.out.println("数据库URL: " + URL);
                System.out.println("用户名: " + USERNAME);
                System.out.println("数据库产品: " + conn.getMetaData().getDatabaseProductName());
                System.out.println("数据库版本: " + conn.getMetaData().getDatabaseProductVersion());
                System.out.println("驱动名称: " + conn.getMetaData().getDriverName());
                System.out.println("驱动版本: " + conn.getMetaData().getDriverVersion());
            }
        } catch (SQLException e) {
            System.err.println("获取数据库信息失败: " + e.getMessage());
        }
    }
}

/*
mysql语句
创建数据库
CREATE DATABASE IF NOT EXISTS secondhand_market;
指定使用这个二手的市场的数据库
USE secondhand_market;
*/

/*
用户表
CREATE TABLE users (
    user_id INT PRIMARY KEY AUTO_INCREMENT, 用户名的序 号
    username VARCHAR(50) UNIQUE NOT NULL, 用户名
    password VARCHAR(100) NOT NULL, 密码
    phone VARCHAR(20), 手机
    email VARCHAR(100),邮箱
    register_date DATETIME DEFAULT CURRENT_TIMESTAMP 注册时间
);
*/

/*
商品表
CREATE TABLE items (
    item_id INT PRIMARY KEY AUTO_INCREMENT, 商品的序号
    user_id INT, 关联到了用户的序号
    name VARCHAR(100) NOT NULL, 卖什么
    price DECIMAL(10,2) NOT NULL, 多少钱
    category VARCHAR(50), 是啥
    description TEXT, 商品怎么样
    usage_months INT, 商品用了多久了
    item_condition VARCHAR(20), 商品还好不好
    publish_date DATETIME DEFAULT CURRENT_TIMESTAMP, 商品的订单的发布时间（关联到本地时间）
    status ENUM('在售', '已售', '下架') DEFAULT '在售', 商品售卖状态
    FOREIGN KEY (user_id) REFERENCES users(user_id)
);*/

/*
订单表
CREATE TABLE orders (
    order_id INT PRIMARY KEY AUTO_INCREMENT, 订单序号
    buyer_id INT, 买的人的序号
    item_id INT, 商品的序号
    order_date DATETIME DEFAULT CURRENT_TIMESTAMP,  订单的时间（也是关联到了本地时间）
    total_amount DECIMAL(10,2), 订单多少钱
    status ENUM('待付款', '已完成', '已取消') DEFAULT '待付款', 订单状态
    FOREIGN KEY (buyer_id) REFERENCES users(user_id),
    FOREIGN KEY (item_id) REFERENCES items(item_id)
);*/

/*测试数据*/
/*
用户测试数据
INSERT INTO users (username, password, phone, email) VALUES
('张三', '123456', '13800138000', 'zhangsan@email.com'),
('李四', '123456', '13900139000', 'lisi@email.com');
*/

/*
商品测试数据
INSERT INTO items (user_id, name, price, category, description, usage_months, item_condition) VALUES
(1, 'Java编程思想', 45.00, '图书', '几乎全新，无划痕', 2, '良好'),
(2, 'iPhone 12', 2800.00, '数码', '使用一年，功能完好', 12, '良好'),
(1, '篮球', 60.00, '运动', '打了几个月，气很足', 3, '一般');
*/

/*
订单测试数据
INSERT INTO orders (buyer_id, item_id, total_amount, status) VALUES
(2, 1, 2800.00, '已完成'),
(3, 2, 45.00, '待付款');
*/